package com.zhitan.netty.enums;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 充电停止原因
 */
@Getter
@AllArgsConstructor
public enum ChargingStopReasonEnum {
    UNKNOWN((byte) 0x00, "未知状态"),
    N_0x40((byte) 0x40, "结束充电,APP 远程停止"),
    N_0x41((byte) 0x41, "结束充电,SOC达到100%"),
    N_0x42((byte) 0x42, "结束充电,充电电量满足设定条件"),
    N_0x43((byte) 0x43, "结束充电,充电金额满足设定条件"),
    N_0x44((byte) 0x44, "结束充电,充电时间满足设定条件"),
    N_0x45((byte) 0x45, "结束充电,手动停止充电"),
    N_0x46((byte) 0x46, "其他方式（预留）"),
    N_0x47((byte) 0x47, "其他方式（预留）"),
    N_0x48((byte) 0x48, "其他方式（预留）"),
    N_0x49((byte) 0x49, "其他方式（预留）"),
    F_0x4A((byte) 0x4A, "充电启动失败,充电桩控制系统故障(需要重启或自动恢复)"),
    F_0x4B((byte) 0x4B, "充电启动失败,控制导引断开"),
    F_0x4C((byte) 0x4C, "充电启动失败,断路器跳位"),
    F_0x4D((byte) 0x4D, "充电启动失败,电表通信中断"),
    F_0x4E((byte) 0x4E, "充电启动失败,余额不足"),
    F_0x4F((byte) 0x4F, "充电启动失败,充电模块故障"),
    F_0x50((byte) 0x50, "充电启动失败,急停开入"),
    F_0x51((byte) 0x51, "充电启动失败,防雷器异常"),
    F_0x52((byte) 0x52, "充电启动失败,BMS未就绪"),
    F_0x53((byte) 0x53, "充电启动失败,温度异常"),
    F_0x54((byte) 0x54, "充电启动失败,电池反接故障"),
    F_0x55((byte) 0x55, "充电启动失败,电子锁异常"),
    F_0x56((byte) 0x56, "充电启动失败,合闸失败"),
    F_0x57((byte) 0x57, "充电启动失败,绝缘异常"),
    F_0x58((byte) 0x58, "充电启动失败,预留"),
    F_0x59((byte) 0x59, "充电启动失败,接收BMS握手报文BHM超时"),
    F_0x5A((byte) 0x5A, "充电启动失败,接收BMS和车辆的辨识报文超时BRM"),
    F_0x5B((byte) 0x5B, "充电启动失败,接收电池充电参数报文超时BCP"),
    F_0x5C((byte) 0x5C, "充电启动失败,接收BMS完成充电准备报文超时BRO AA"),
    F_0x5D((byte) 0x5D, "充电启动失败,接收电池充电总状态报文超时BCS"),
    F_0x5E((byte) 0x5E, "充电启动失败,接收电池充电要求报文超时BCL"),
    F_0x5F((byte) 0x5F, "充电启动失败,接收电池状态信息报文超时BSM"),
    F_0x60((byte) 0x60, "充电启动失败,GB2015电池在BHM阶段有电压不允许充电"),
    F_0x61((byte) 0x61, "充电启动失败,GB2015辨识阶段在BRO_AA时候电池实际电压与BCP报文电池电压差距大于5%"),
    F_0x62((byte) 0x62, "充电启动失败,GB2015充电机在预充电阶段从BRO_AA变成BRO_00状态"),
    F_0x63((byte) 0x63, "充电启动失败,接收主机配置报文超时"),
    F_0x64((byte) 0x64, "充电启动失败,充电机未准备就绪,我们没有回CRO AA,对应老国标"),
    F_0x65((byte) 0x65, "充电启动失败,预留"),
    F_0x66((byte) 0x66, "充电启动失败,预留"),
    F_0x67((byte) 0x67, "充电启动失败,预留"),
    F_0x68((byte) 0x68, "充电启动失败,预留"),
    F_0x69((byte) 0x69, "充电启动失败,预留"),
    AB_0x6A((byte) 0x6A, "充电异常中止,系统闭锁"),
    AB_0x6B((byte) 0x6B, "充电异常中止,导引断开"),
    AB_0x6C((byte) 0x6C, "充电异常中止,断路器跳位"),
    AB_0x6D((byte) 0x6D, "充电异常中止,电表通信中断"),
    AB_0x6E((byte) 0x6E, "充电异常中止,余额不足"),
    AB_0x6F((byte) 0x6F, "充电异常中止,交流保护动作"),
    AB_0x70((byte) 0x70, "充电异常中止,直流保护动作"),
    AB_0x71((byte) 0x71, "充电异常中止,充电模块故障"),
    AB_0x72((byte) 0x72, "充电异常中止,急停开入"),
    AB_0x73((byte) 0x73, "充电异常中止,防雷器异常"),
    AB_0x74((byte) 0x74, "充电异常中止,温度异常"),
    AB_0x75((byte) 0x75, "充电异常中止,输出异常"),
    AB_0x76((byte) 0x76, "充电异常中止,充电无电流"),
    AB_0x77((byte) 0x77, "充电异常中止,电子锁异常"),
    AB_0x78((byte) 0x78, "充电异常中止,预留"),
    AB_0x79((byte) 0x79, "充电异常中止,总充电电压异常"),
    AB_0x7A((byte) 0x7A, "充电异常中止,总充电电流异常"),
    AB_0x7B((byte) 0x7B, "充电异常中止,单体充电电压异常"),
    AB_0x7C((byte) 0x7C, "充电异常中止,电池组过温"),
    AB_0x7D((byte) 0x7D, "充电异常中止,最高单体充电电压异常"),
    AB_0x7E((byte) 0x7E, "充电异常中止,最高电池组过温"),
    AB_0x7F((byte) 0x7F, "充电异常中止,BMV单体充电电压异常"),
    AB_0x80((byte) 0x80, "充电异常中止,BMT电池组过温"),
    AB_0x81((byte) 0x81, "充电异常中止,电池状态异常停止充电"),
    AB_0x82((byte) 0x82, "充电异常中止,车辆发报文禁止充电"),
    AB_0x83((byte) 0x83, "充电异常中止,充电桩断电"),
    AB_0x84((byte) 0x84, "充电异常中止,接收电池充电总状态报文超时"),
    AB_0x85((byte) 0x85, "充电异常中止,接收电池充电要求报文超时"),
    AB_0x86((byte) 0x86, "充电异常中止,接收电池状态信息报文超时"),
    AB_0x87((byte) 0x87, "充电异常中止,接收 BMS 中止充电报文超时"),
    AB_0x88((byte) 0x88, "充电异常中止,接收 BMS 充电统计报文超时"),
    AB_0x89((byte) 0x89, "充电异常中止,接收对侧 CCS 报文超时"),
    AB_0x8A((byte) 0x8A, "充电异常中止,"),
    AB_0x8B((byte) 0x8B, "充电异常中止,"),
    AB_0x8C((byte) 0x8C, "充电异常中止,"),
    AB_0x8D((byte) 0x8D, "充电异常中止,"),
    AB_0x8E((byte) 0x8E, "充电异常中止,"),
    AB_0x8F((byte) 0x8F, "充电异常中止,"),
    AB_0x90((byte) 0x90, "未知原因停止");

    private final byte code;
    private final String reason;

    /**
     * 根据code获取枚举
     */
    public static ChargingStopReasonEnum getByCode(byte code) {
        for (ChargingStopReasonEnum value : ChargingStopReasonEnum.values()) {
            if (value.getCode() == code) {
                return value;
            }
        }
        return UNKNOWN;
    }

}
